<?php

class Panneau {

    // int, identifiant du panneau
    private $idPanneau;
    private $nomPanneau;
    //varchar, code hexadecimal 
    private $couleurFondPanneau;
    //text, contenu du panneau (editeur wysiwyg)
    private $contenu;
    //int, position du panneau
    private $position;
    //boolean, statut du panneau
    private $active;

    function __construct($idPanneau, $nomPanneau, $couleurFondPanneau, $position, $contenu, $active) {
        $this->idPanneau = $idPanneau;
        $this->nomPanneau = $nomPanneau;
        $this->couleurFondPanneau = $couleurFondPanneau;
        $this->contenu = $contenu;
        $this->position = $position;
        $this->active = $active;
    }

    /** Fonction d'enregistrement en base d'un panneau */
    public function sauvPanneau() {
        $dbInstance = Db::getInstance();
        $this->position = $this->donneDernierePosition();
        $sql = 'INSERT INTO panneau(nomPanneau, couleurFondPanneau, contenu, position, active) 
            VALUES (' . $dbInstance->quote($this->nomPanneau) . ',' . $dbInstance->quote($this->couleurFondPanneau) . ', ' . $dbInstance->quote($this->contenu) . ', ' . $dbInstance->quote($this->position) . ', ' . $dbInstance->quote($this->active) . ')';
        $id = $dbInstance->execute($sql, true);
        if ($id == false)
            return false;
        else {
            $this->idPanneau = $id;
            return true;
        }
    }

    public function donneDernierePosition() {

        $dbInstance = Db::getInstance();
        $sql = 'SELECT Max(position) as position_max FROM panneau';
        $resultat = $dbInstance->query($sql);
        $res = array();
        if ($resultat != null) {
            while ($ligne = $resultat->fetch(PDO::FETCH_OBJ)) {
                $res[] = $ligne;
            }
        }
        $obj = $res[0];
        $p = $obj->position_max;
        return $p + 1;
    }

    public function getPanneauPositionSuivante() {
        $dbInstance = Db::getInstance();
        $sql = 'SELECT * FROM `panneau` p WHERE p.position > ' . $this->getPosition() . ' ORDER BY position LIMIT 0,1';

        $resultat = $dbInstance->query($sql);
        $res = array();
        if ($resultat != null) {
            while ($ligne = $resultat->fetch(PDO::FETCH_OBJ)) {
                $res[] = $ligne;
            }
        }
        $obj = $res[0];
        $p = new Panneau($obj->idPanneau, $obj->nomPanneau, $obj->couleurFondPanneau, $obj->position, $obj->contenu, $obj->active);
        return $p;
    }

    public function getPanneauPositionPrecedente() {
        $dbInstance = Db::getInstance();
        $sql = 'SELECT * FROM `panneau` p WHERE p.position < ' . $this->getPosition() . ' ORDER BY position DESC LIMIT 0,1';
        $resultat = $dbInstance->query($sql);
        $res = array();
        if ($resultat != null) {
            while ($ligne = $resultat->fetch(PDO::FETCH_OBJ)) {
                $res[] = $ligne;
            }
        }
        $obj = $res[0];
        $p = new Panneau($obj->idPanneau, $obj->nomPanneau, $obj->couleurFondPanneau, $obj->position, $obj->contenu, $obj->active);
        return $p;
    }

    /**  @todo Fonction permettant de descendre d'un cran la position d'un panneau * */
    public function descendre() {
        $dbInstance = Db::getInstance();
        if ($this->position != null) {
            $panneauSuivant = $this->getPanneauPositionSuivante();

            $sql = 'UPDATE panneau SET position=' . $panneauSuivant->getPosition() . '  WHERE idPanneau=' . $this->idPanneau;
            $dbInstance->execute($sql);
            $sql = 'UPDATE panneau SET position=' . $this->position . '  WHERE idPanneau=' . $panneauSuivant->getIdPanneau();
            $dbInstance->execute($sql);
        }
        else
            return false;
    }

    /**  @todoFonction permettant de monter d'un cran la position d'un panneau * */
    public function monter() {
        $dbInstance = Db::getInstance();
        if ($this->position != null) {
            $panneauSuivant = $this->getPanneauPositionPrecedente();

            $sql = 'UPDATE panneau SET position=' . $panneauSuivant->getPosition() . '  WHERE idPanneau=' . $this->idPanneau;
            $dbInstance->execute($sql);
            $sql = 'UPDATE panneau SET position=' . $this->position . '  WHERE idPanneau=' . $panneauSuivant->getIdPanneau();
            $dbInstance->execute($sql);
        }
        else
            return false;
    }

    /** @todo Fonction permettant de désactiver le panneau * */
    public function desactiverPanneau() {
        $dbInstance = Db::getInstance();
        if ($this->active != null) {
            $this->active = false;
            $sql = 'UPDATE panneau SET active=' . $this->active . '  WHERE idPanneau=' . $this->idPanneau;
            $dbInstance->execute($sql);
        } else
            return false;
    }

    /** @todo
     * Fonction permettant d'activer le panneau * */
    public function activerPanneau() {
        $dbInstance = Db::getInstance();
        if ($this->active != null) {
            $this->active = true;
            $sql = 'UPDATE panneau SET active=' . $this->active . '  WHERE idPanneau=' . $this->idPanneau;
            $dbInstance->execute($sql);
        } else
            return false;
    }

    
    public function modifierPanneau($nomPanneau = null, $contenu = null, $couleurFondPanneau = null, $active = null) {
        $dbInstance = Db::getInstance();
        $sql = 'UPDATE panneau SET ';


        if ($nomPanneau != null) {
            $this->nomPanneau = $dbInstance->quote($nomPanneau);
            $sql .='nomPanneau=' . $this->nomPanneau;
            if ($contenu != null || $couleurFondPanneau != null)
                $sql.=', ';
        }
        if ($contenu != null) {
            $this->contenu = $dbInstance->quote($contenu);
            $sql .='contenu=' . $this->contenu;
            if ($couleurFondPanneau != null)
                $sql.=', ';
        }
        if ($couleurFondPanneau != null) {
            $this->couleurFondPanneau = $dbInstance->quote($couleurFondPanneau);
            $sql .='couleurFondPanneau=' . $this->couleurFondPanneau;
            if ($contenu != null )
                $sql.=', ';
        }
        if ($active != null) {
            $this->active = $dbInstance->quote($active);
            $sql .='active=' . $this->active;
            
        }
        $sql.=' WHERE idPanneau=' . (int) $this->idPanneau;
        $dbInstance->execute($sql);
    }

    /** @todo
     * 
     * Fonction permettant de récuperer un objet Panneau rempli à partir de la base de données
     * Le panneau est trouvé en base grâce à l'id passé en paramètre
     */
    public static function getPanneau($id_Panneau = null) {
        if ($id_Panneau == null)
            return false;
        $dbInstance = Db::getInstance();
        $sql = 'SELECT * FROM panneau
                 WHERE idPanneau = "' . $id_Panneau . '" ';
        $resultat = $dbInstance->query($sql);
        $res = array();
        if ($resultat != null) {
            while ($ligne = $resultat->fetch(PDO::FETCH_OBJ)) {
                $res[] = $ligne;
            }
        }
        $obj = $res[0];
        $p = new Panneau($obj->idPanneau, $obj->nomPanneau, $obj->couleurFondPanneau, $obj->position, $obj->contenu, $obj->active);
        return $p;
    }

    public function supprimerPanneau() {
        $dbInstance = Db::getInstance();
        $id = $this->getIdPanneau();
        if (isset($id) && !empty($id)) {

            $sql = "DELETE FROM panneau WHERE idPanneau= '" . $id . "'";


            return ($dbInstance->execute($sql));
        }
        else
            return false;
    }

    
    public static function getListePanneau() {

        $dbInstance = Db::getInstance();
        $sql = 'SELECT * FROM panneau';
        $sql.= ' ORDER BY position ASC';

        $resultat = $dbInstance->query($sql);
        $res = array();
        if ($resultat != null) {
            while ($obj = $resultat->fetch(PDO::FETCH_OBJ)) {
                $res[] = new Panneau($obj->idPanneau, $obj->nomPanneau, $obj->couleurFondPanneau, $obj->position, $obj->contenu, $obj->active);
            }
        }
        return $res;
    }

    // Récupération des panneaux à afficher côté public.    
    public static function getListePanneauAffiche() {

        $dbInstance = Db::getInstance();
        $sql = 'SELECT * FROM panneau WHERE active="1"';
        $sql.= ' ORDER BY position ASC';

        $resultat = $dbInstance->query($sql);
        $res = array();
        if ($resultat != null) {
            while ($obj = $resultat->fetch(PDO::FETCH_OBJ)) {
                $res[] = new Panneau($obj->idPanneau, $obj->nomPanneau, $obj->couleurFondPanneau, $obj->position, $obj->contenu, $obj->active);
            }
        }
        return $res;
    }
    
    
    public function getIdPanneau() {
        return $this->idPanneau;
    }

    public function setIdPanneau($idPanneau) {
        $this->idPanneau = $idPanneau;
    }

    public function getNomPanneau() {
        return $this->nomPanneau;
    }

    public function setNomPanneau($nomPanneau) {
        $this->nomPanneau = $nomPanneau;
    }

    public function getCouleurFondPanneau() {
        return $this->couleurFondPanneau;
    }

    public function setCouleurFondPanneau($couleurFondPanneau) {
        $this->couleurFondPanneau = $couleurFondPanneau;
    }

    public function getContenu() {
        return $this->contenu;
    }

    public function setContenu($contenu) {
        $this->contenu = $contenu;
    }

    public function getPosition() {
        return $this->position;
    }

    public function setPosition($position) {
        $this->position = $position;
    }

    public function getActive() {
        return $this->active;
    }

    public function setActive($active) {
        $this->active = $active;
    }

}

?>
